home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / datasheets and manuals / Hardware / WHT / scsi / dsr_sources_2_2001 / fddr < prev    next >
Text File  |  2006-10-19  |  5KB  |  152 lines

  1. * Procedure FDDR - Find Directory Descriptor Re Ord
  2. *
  3. * This procedure will search the subdirectory name cache for
  4. * the name of the directory in the name compare buffer.  The
  5. * caller's R2 specifies the end of the directory name by
  6. * pointing to one past the last character in the name.
  7. *
  8. * If the directory is found in the cache, the caller's equal
  9. * bit is set and R4 will point to the directory cache entry.
  10. *
  11. *
  12. * Note: RAM bank 4 must be enabled before calling this procedure
  13. *
  14.  
  15. FDDR   DATA FDDRWS
  16.        DATA FDDR0
  17.  
  18. FDDR0  MOV  @4(R13),R2   Get the caller's R2
  19.        LI   R4,DNCASH
  20.  
  21. FDDR1  MOV  *R4,R0       Is this a valid entry?
  22.        JEQ  FDDR3        If not, try next one
  23.  
  24.        CB   *R4,@12(R13) Does the SCSI ID match the caller's R6
  25.        JNE  FDDR3        If not, try next one
  26.  
  27.        MOV  R4,R5
  28.        AI   R5,4         R5 points to directory name in cache entry
  29.        CI   R2,NCB-1     See if We're looking for root directory
  30.        JEQ  FDDR2A
  31.        LI   R3,NCB
  32. FDDR2  C    R3,R2
  33.        JEQ  FDDR2A
  34.        CB   *R3+,*R5+    Compare the two names
  35.        JEQ  FDDR2
  36.        JMP  FDDR3
  37.  
  38. FDDR2A CB   *R5,@SPACE   Make sure name ends here
  39.        JNE  FDDR3
  40.  
  41.        MOV  R4,@8(R13)   Name matches, store in caller's R4
  42.        SOC  @EQBIT,R15   Set caller's equal bit
  43.        RTWP              and return
  44.  
  45. FDDR3  AI   R4,48        Here we go to next one
  46.        CI   R4,>5FFE-48
  47.        JL   FDDR1
  48.  
  49.        SZC  @EQBIT,R15   No matches, clear caller's equal bit
  50.        RTWP              and return
  51.  
  52.  
  53. ************************************************************
  54. *                                                          *
  55. * Procedure RESDCE - Reserve Data Cache Entry              *
  56. *                                                          *
  57. *  This procedure will search the directory cache entries  *
  58. *  for an entry that is either unused or so old, it's      *
  59. *  ready to be replaced                                    *
  60. *                                                          *
  61. *  It will return a pointer to the entry in the caller's   *
  62. *  R4.                                                     *
  63. *                                                          *
  64. *  When this procedure finishes, it transfers control to   *
  65. *  the the procedure FREDCE which will get a DDR cache     *
  66. *  entry.                                                  *
  67. *                                                          *
  68. *                                                          *
  69. ************************************************************
  70.  
  71. RESDCE DATA FDDRWS
  72.        DATA RESD1
  73.  
  74. RESD1  SETO R3
  75.        LI   R4,DNCASH
  76.  
  77. RESD2  MOV  *R4,R5       Has this entry ever been used?
  78.        JEQ  RESD4        If not, use it.
  79.  
  80.        MOV  @2(R4),R5    Does this entry have it's DDR in RAM?
  81.        JNE  RESD3        If so, do not use it
  82.  
  83.        C    R3,@46(R4)   Is this entry the oldest?
  84.        JL   RESD3        If not, try another one
  85.  
  86.        MOV  @46(R4),R3   Save age of oldest entry
  87.        MOV  R4,R6        Save pointer to oldest entry
  88.  
  89. RESD3  AI   R4,48        Go to next entry
  90.        CI   R4,>5FFE-48  Did we check them all?
  91.        JL   RESD2        If not, go back and check some more
  92.  
  93.        MOV  R6,R4
  94. RESD4  INC  @>5FFE       Increment our age number
  95.        MOV  @>5FFE,@46(R4)
  96.        MOV  R4,@8(R13)   Save pointer in caller's R4
  97.        CLR  *R4+
  98.        CLR  *R4+
  99.        LI   R3,40        Blank out the name
  100. RESD5  MOV  @SPACE,*R4+
  101.        DECT R3
  102.        JNE  RESD5
  103.  
  104.        JMP  FREDC1       Now go free a DDR cache entry
  105.  
  106. ************************************************************
  107. *                                                          *
  108. *  Procedure FREDCE - Free DDR cache entry                 *
  109. *                                                          *
  110. *  This procedure will check to see if all the DDR cache   *
  111. *  entries are in use.  If not, it will take the first     *
  112. *  unused entry and return it to the caller.  If they      *
  113. *  are all in use, it will take the oldest entry and take  *
  114. *  it away from the Directory Name cache entry             *
  115. *                                                          *
  116. *  It returns a pointer to the DDR cache address in the    *
  117. *  caller's R5.                                            *
  118. *                                                          *
  119. ************************************************************
  120.  
  121. FREDCE DATA FDDRWS
  122.        DATA FREDC1
  123.  
  124. FREDC1 LI   R1,DNCASH
  125.        SETO R2
  126.        LI   R3,>4F00     R3 will keep track of the highest used DDR entry
  127.  
  128. FREDC2 MOV  @2(R1),R4    Does this entry have it's DDR in cache?
  129.        JEQ  FREDC4       If not, try another one
  130.        C    R3,R4
  131.        JH   FREDC3
  132.        MOV  R4,R3
  133.  
  134. FREDC3 C    @46(R1),R2   Check age of this entry
  135.        JH   FREDC4
  136.        MOV  R1,R5        Save this address since it's the oldest
  137.        MOV  @46(R1),R2
  138.  
  139. FREDC4 AI   R1,48        Go to next entry
  140.        CI   R1,>5FFE-48  Check to see if all entries have been checked
  141.        JL   FREDC2       if not, go back
  142.  
  143.        CI   R3,>5F00     See if all DDR entries have been used
  144.        JEQ  FREDC5       If so, swap out an old one
  145.        AI   R3,>100
  146.        MOV  R3,@10(R13)  Otherwise, return the unused one
  147.        RTWP
  148.  
  149. FREDC5 MOV  @2(R5),@10(R13) Save pointer in caller's R5
  150.        CLR  @2(R5)          swap out old one
  151.        RTWP                 and return
  152.